class: inverse, center, middle name: aca
| .plot-callout[ |
|---|
| # What percent of people are uninsured? |
What percent of people are uninsured?
How do people get health insurance?
| .plot-callout[ |
|---|
| # How do people get health insurance? |
The U.S. still relies heavily on private insurance provided by employers.
Any thoughts on why? |
|---|
| # Employer provided insurance |
| 1. Stabalization act of 1942 (wages frozen but not benefits) |
| 2. Tax exclusion for insurance expenditures (1954) |
The Kaiser Family Foundation has some great info on this…
- KFF Medicaid Coverage - KFF Report on ACA Expansion - Health Insurance and Mortality (not what we’re discussing here but still important)
class: inverse, center, middle name: dd
[:col_header , Post-period, Pre-period] [:col_row Treated, \(E(Y_{1}(1)|W=1)\), \(E(Y_{0}(0)|W=1)\)] [:col_row Control, \(E(Y_{0}(1)|W=0)\), \(E(Y_{0}(0)|W=0)\)]
Strategy 1: Estimate \(E[Y_{0}(1)|W=1]\) using \(E[Y_{0}(0)|W=1]\) (before treatment outcome used to estimate post-treatment)
[:col_header , Post-period, Pre-period] [:col_row Treated, \(E(Y_{1}(1)|W=1)\), \(E(Y_{0}(0)|W=1)\)] [:col_row Control, \(E(Y_{0}(1)|W=0)\), \(E(Y_{0}(0)|W=0)\)]
Strategy 3: DD estimate…
Estimate \(E[Y_{1}(1)|W=1] - E[Y_{0}(1)|W=1]\) using \(E[Y_{0}(1)|W=0] - E[Y_{0}(0)|W=0]\) (pre-post difference in control group used to predict difference for treatment group)
Key identifying assumption is that of parallel trends
\[E[Y_{0}(1) - Y_{0}(0)|W=1] = E[Y_{0}(1) - Y_{0}(0)|W=0]\] |
|---|
| # Estimation Sample means: \[\begin{align} E[Y_{1}(1) - Y_{0}(1)|W=1] &=& \left( E[Y(1)|W=1] - E[Y(1)|W=0] \right) \\ & & - \left( E[Y(0)|W=1] - E[Y(0)|W=0]\right) \end{align}\] |
Regression:
\(Y_{i} = \alpha + \beta W_{i} + \lambda 1(Post) + \delta W_{i} \times 1(Post) + \varepsilon\)
[:col_header , After, Before, After - Before] [:col_row Treated, \(\alpha + \beta + \lambda + \delta\), \(\alpha + \beta\), \(\lambda + \delta\)] [:col_row Control, \(\alpha + \lambda\), \(\alpha\), \(\lambda\)] [:col_row Treated - Control, \(\beta + \delta\), \(\beta\), \(\delta\)]
dd.means <- dd.dat %>% group_by(w, t) %>% summarize(mean_y = mean(y.out))
knitr::kable(dd.means, col.names=c("Treated","Post","Mean"), format="html")
| Treated | Post | Mean |
|---|---|---|
| FALSE | FALSE | 1.522635 |
| FALSE | TRUE | 3.002374 |
| TRUE | FALSE | 5.515027 |
| TRUE | TRUE | 7.004623 |
dd.naive <- lm(y.out ~ w + t, data=dd.dat)
summary(dd.naive)
##
## Call:
## lm(formula = y.out ~ w + t, data = dd.dat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.0062 -0.6692 0.0040 0.6617 3.6160
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.52019 0.01708 89.01 <2e-16 ***
## wTRUE 3.99732 0.01976 202.28 <2e-16 ***
## tTRUE 1.48464 0.01976 75.13 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9881 on 9997 degrees of freedom
## Multiple R-squared: 0.8232, Adjusted R-squared: 0.8232
## F-statistic: 2.328e+04 on 2 and 9997 DF, p-value: < 2.2e-16
class: inverse, center, middle name: aca_data
Code and links available at the Insurance Access GitHub repository
acs package…details on the GitHub repoAnd now for some basic summary stats (pooling all years):
stargazer(as.data.frame(ins.dat %>% select(perc_unis, perc_direct, perc_medicaid)), type="html")
## Error: Can't subset columns that don't exist.
## [31mx[39m The column `perc_unis` doesn't exist.
class: inverse, center, middle name: medicaid
Use pre/post and expansion/non-expansion states to identify effect of Medicaid expansion: \[y_{it} = \alpha + \beta \times 1(Post) + \gamma \times 1(Expand) + \delta \times 1(Post) \times 1(Expand) + \varepsilon\]
First just plot seperately by group:
ins.plot.dat <- ins.dat %>% filter(!is.na(expand_ever)) %>%
group_by(expand_ever, year) %>% summarize(mean=mean(perc_unins))
ggplot(data=ins.plot.dat, aes(x=year,y=mean,group=expand_ever,linetype=expand_ever)) +
geom_line() + geom_point() + theme_bw() +
geom_vline(xintercept=2013.5, color="red") +
geom_text(data = ins.plot.dat %>% filter(year == 2016),
aes(label = c("Non-expansion","Expansion"),
x = year + 1,
y = mean)) +
guides(linetype=FALSE) +
labs(
x="Year",
y="Fraction Uninsured",
title="Share of Uninsured over Time"
)
.plot-callout[ ]
This is poorly named: - In finance, even study is just an interrupted time series - In economics, we usually have a treatment/control group and a break in time
Second, run regression with full set of interactions and group/year dummies:
event.ins.reg <- lm(perc_unins ~ expand_2012 + expand_2014 +
expand_2015 + expand_2016 + expand_2017 +
expand_2018 + factor(year) + factor(State), data=event.dat)
point.est <- as_tibble(c(event.ins.reg$coefficients[c("expand_2012","expand_2014","expand_2015",
"expand_2016","expand_2017","expand_2018")]),
rownames = "term")
ci.est <- as_tibble(confint(event.ins.reg)[c("expand_2012","expand_2014","expand_2015",
"expand_2016","expand_2017","expand_2018"),],
rownames = "term")
Finally, plot coefficients and confidence intervals
.plot-callout[ ]